package com.huya.demo.minio.controller;

import com.huya.demo.minio.domain.R;
import com.huya.demo.minio.utils.MinioUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * MinIO 控制器
 *
 * @author huya
 * @date 2025-01-10
 */
@Slf4j
@RestController
@RequestMapping("/minio")
@RequiredArgsConstructor
public class MinioController {

    private final MinioUtils minioUtils;

    /**
     * 文件上传
     *
     * @param multipartFile 文件
     * @return 结果
     */
    @PostMapping("/upload")
    public R<String> upload(@RequestParam("file") MultipartFile multipartFile) {
        return R.success(minioUtils.uploadFile(multipartFile));
    }

    /**
     * 文件批量上传
     *
     * @param multipartFiles 文件列表
     * @return 结果
     */
    @PostMapping("/uploads")
    public R<List<String>> upload(@RequestParam("files") List<MultipartFile> multipartFiles) {
        return R.success(minioUtils.uploadFiles(multipartFiles));
    }

    /**
     * 文件删除
     *
     * @param fileName 文件名
     */
    @DeleteMapping("/")
    public R<Boolean> delete(@RequestParam("fileName") String fileName) {
        return R.success(minioUtils.removeFile(fileName));
    }

    /**
     * 获取文件 URL
     *
     * @param fileName 文件名
     * @return 结果
     */
    @GetMapping("/url")
    public R<String> getPresignedObjectUrl(@RequestParam("fileName") String fileName) {
        return R.success(minioUtils.getPresignedObjectUrl(fileName));
    }

    /**
     * 文件下载
     *
     * @param fileName 文件名
     * @param response 响应
     */
    @GetMapping("/download")
    public void download(@RequestParam("fileName") String fileName, HttpServletResponse httpServletResponse) {
        minioUtils.downloadFile(fileName, httpServletResponse);
    }
}
